// Object.defineProperty() 方法会直接在一个对象上定义一个新属性，或者修改一个对象的现有属性，并返回此对象。

const obj = {
  a: 3,
  b: 4,
};

// Object.defineProperty()我们是用来劫持数据的
// 第一个参数是要操作的对象
// 第二个参数是要操作的属性
// 第三个参数是一个描述性对象
let a;
Object.defineProperty(obj, "b", {
  get() {
    // get方法是这个对象下的该属性被访问的时候调用
    // get方法必须要有return
    console.log("get");
    return a;
  },
  set(val) {
    // set方法是这个对象下的该属性被修改的时候调用
    // set不需要return，但是可以接收一个参数是val
    console.log("set", val);
    a = val;
    // 去重新渲染页面了
  },
});

obj.b = 6;
console.log(obj.b);
